\chapter{Voraussetzungen für die Software-Entwicklung}\label{chap:voraussetzungen}
\section{Einleitung}
Die Anleitung ist für die Installation der Entwicklungstools und der Konfiguration der Software auf einem Linux Betriebssystem ausgerichtet. Einige der Informationen wurden dem Documentation Wiki auf der Blackfin Seite\cite{blackfin-wiki} entnommen und entsprechenden Änderungen unterzogen. Um Software für das LCV Board zu entwickeln werden folgende Programme benötigt:
\begin{description}
  \item[Blackfin Toolchain] Die Toolchain wird für das Cross-Compiling auf den Blackfin Prozessor benötigt.
  \item[uClinux Distribution] Die Quellen der Distribution werden zum Kompilieren des Kernels benötigt.
  \item[make] Das GNU Make Utility zum Kompilieren des Kernels und von Programmen.
  \item[GCC] Der GNU C Compiler zum Kompilieren von Programmen für das Hostsystem.
  \item[TFTP  Server] Um das uClinux Image auf das LCV Board zu laden ist ein lauffähiger TFTP Server notwendig.
  \item[minicom] Ein Terminalprogramm für Linux. Es kann auch ein vergleichbares Terminalprogramm verwendet werden.
  \item[Zmodem Tools ] Das in den Zmodem Tool enthaltene Programm lrz erlaubt das Senden von Dateien über die serielle Schnittstelle.
  \item[GDB] Der GNU Debugger unterstützt u.A. Debuggen über Ethernet.
\end{description}

\section{Toolchain}\label{sec:toolchain}
Um Software und Kernel für uClinux kompilieren zu können wird die Blackfin Cross-Compiling Toolchain benötigt. Eine Anleitung zur Installation ist auf der
Blackfin Webseite\cite{toolchain-howto} verfügbar. Die Toolchain selbst kann
auf der Toolchain File Release Page\cite{toolchain-files} heruntergeladen
werden. Von der Toolchain existieren sowohl Quellen als auch vorkompilierte Binaries. Aus unserer Erfahrung bei der Installation und dem Gebrauch der Toolchain können wir folgende Aussage machen:\\

Mit der vorkompilierten Version (blackfin-toolchain-07r1.1-3.i386.rpm) konnten wir Softwareprojekte kompilieren und auf dem Zielsystem auszuführen. Jedoch waren wir nicht in der Lage, die von uns verwendete uClinux Distribution (Es handelt sich dabei um uClinux Live Sources, Stand Juli 2007) damit zu kompilieren. Wir vermuten das die Versionsunterschiede zwischen der uClinux Distribution un der Toolchain zu gross sind. \\

Nach erfolgreicher Installation oder Kompilation muss das Installationsverzeichnis der Toolchain zur Systemumgebungsvariable PATH hinzugefügt werden. Diese Einstellung muss im Eclipse IDE erneut vorgenommen werden, auch wenn der Installationspfad systemweit gesetzt wurde. Genauere Informationen finden sich in der entsprechenden, ebenfalls im Anhang enthaltenen Anleitung (\ref{chap:eclipse}).

\section{uClinux Distribution}
Wie bereits unter \ref{sec:toolchain} erwähnt, arbeiteten wir mit den von unserem Vorgänger veränderten Live Sources der uClinux Distribution mit Stand Juli 2007. Will man auf einem Stable Release oder einer neueren uClinux Distribution entwickeln sind Änderungen in einigen Dateien und in der Kernelkonfiguration der uClinux Distribution erforderlich. Wir waren nicht im Stande bei einem Stable Release die notwendigen Änderungen durchzuführen, aus diesem Grund können wir auch keine Anleitung zur Anpassung der Distribution präsentieren. Wir verweisen an dieser Stelle an die Dokumentation von Fabian Brugger\cite{thesis-fabianbrugger} in deren Appendix  E, \textit{How-To Manuals} wird die Vorgehensweise zur Anpassung der uClinux Distribution grob beschrieben.

\section{Make und GCC}
Make und GCC werden zur Softwareentwicklung auf dem Hostsystem benötigt. Die Installation gestaltet sich je nach Linux Distribution unterschiedlich. Da es sich um weit verbreitete Software handelt verzichten wir auf eine Installationsanleitung.

\section{TFTP Server}
Der Server wird für das Herunterladen des kompilierten uClinux Kernels auf das Zielsystem benötigt. Eine ausführliche Installations- und Konfigurationsanleitung findet sich auf dem Blackfin Documentation Wiki\cite{tftpserver-howto}.
Als Hinweis sei gesagt, dass man überprüfen sollte ob auf dem System noch Dienste laufen die TCP Ports von Aussen blockieren. Als Beispiel sei AppArmor genannt. Es empfiehlt sich, solche Dienste bei der Verwendung des TFTP Servers temporär zu deaktivieren.

\section{Minicom}
Um über eine serielle Schnittstelle Konsolenzugriff auf das Zielsystem zu erhalten ist ein Terminalprogramm erforderlich. Natürlich kann auch eine Alternative zu Minicom gewählt. Wir haben uns aber aufgrund einer guten Anleitung\cite{minicom-howto} und der Unterstützung von Minicom, Dateien über eine Terminalverbindung auf das Zielsystem zu laden dafür entschieden.
Die allgemeinen Einstellungen für die serielle Konsole lauten wiefolgt:

\begin{tabular}{ll}
Anschluss: & /dev/ttyUSB0 (Das Device variiert je nach Anschluss) \\ 
Baudrate: & 115200 \\ 
Datenbits: & 8 \\ 
Stopp Bits: & 1 \\ 
Flusskontrolle: & Nein \\ 
\end{tabular} 

\section{Zmodem Tools}\label{sec:zmodem}
Zusätzlich zu einem Terminalprogramm wird die Installation der Zmodem Tools  zur Übertragung von Dateien über die Serielle Schnittstelle empfohlen. Diese Funktionalität ist vor allem für Testzwecke praktisch. Unter Ubuntu Linux sind die Tools im Packet \textit{Lrzsz} enthalten. 
In der uClinux Distribution muss das Programm \textit{lrz} mitkompiliert werden.
Dazu muss es in der Kernelkonfiguration (\textit{make menuconfig}) hinzugefügt werden.
Die Benutzereinstellungen müssen wie folgt angepasst werden:\\
\textit{Kernel/Library/Defaults Selection $\rightarrow$ Customize Vendor/User Settings $\rightarrow$ Auswählen $\rightarrow$ Exit $\rightarrow$ Exit $\rightarrow$ Yes}\\
Im neu erscheinenden Fenster folgende Schritte durchführen: \\
\textit{Miscellaneous Applications $\rightarrow$ zmodem utils $\rightarrow$ lrz $\rightarrow$ Auswählen $\rightarrow$ Exit $\rightarrow$ Exit $\rightarrow$ Yes}\\
Wenn der Kernel nun neu kompiliert und auf das Zielsystem geladen wird, ist lrz darin enthalten.

\section{GDB - GNU Debugger}
Um Programme auf dem Zielsystem über Ethernet debuggen zu können muss GDB sowohl auf dem Host, als auch auf dem Zielsystem installiert sein. Bei Ubuntu Linux (oder anderen Debian basierenden Linux-Distributionen) kann einfach das Paket \textit{gdb} installiert werden.\\
Zur Installation des GDB Servers auf dem Zielsystem sind in der Kernelkonfiguration (\textit{make menuconfig}) folgende Schritte zu durchlaufen:\\
\textit{Kernel/Library/Defaults Selection $\rightarrow$ Customize Vendor/User Settings $\rightarrow$ Auswählen $\rightarrow$ Exit $\rightarrow$ Exit $\rightarrow$ Yes}\\
Im neu erscheinenden Fenster folgende Schritte durchführen: \\
\textit{Miscellaneous Applications $\rightarrow$ gdbserver (old) $\rightarrow$ Auswählen $\rightarrow$ Exit $\rightarrow$ Exit $\rightarrow$ Yes}\\
Wenn der Kernel nun neu kompiliert und auf das Zielsystem geladen wird, ist der GDB Server darin enthalten.
